import myVode from './myVode'
import mySameVnode from './mySameVnode'
import myCreateElement from './myCreateElement'
import myPatchVnode from './myPatchVnode'
export default function myPatch(oldVnode, newVnode) {
  console.log(oldVnode, newVnode, ',myPatch')
  // 当前oldVnode是否是虚拟节点
  if (oldVnode.sel == '' || oldVnode.sel == undefined) {
    // 不是虚拟节点--第一次将<div id='app'></div>进行上树的时候就会出现这种情况
    console.log('oldVnode不是虚拟节点')
    oldVnode = emptyNodeAt(oldVnode)
  }
  if (mySameVnode(oldVnode, newVnode)) {
    console.log('新旧虚拟节点为同一个')
    myPatchVnode(oldVnode, newVnode)
  } else {
    console.log('新旧虚拟节点不是同一个')
    // 不是同一个节点的话，就是暴力的将原有的节点删掉，将新的节点插在旧节点前面
    let newVnodeElm = myCreateElement(newVnode)
    console.log(newVnodeElm, 'newVnodeElm')
    if (oldVnode.elm.parentNode && oldVnode.elm) {
      oldVnode.elm.parentNode.insertBefore(newVnodeElm, oldVnode.elm)
    }
    oldVnode.elm.parentNode.removeChild(oldVnode.elm)
  }
}

function emptyNodeAt(elm) {
  console.log(elm, 'elm')
  return myVode(elm.tagName.toLowerCase(), {}, [], undefined, elm)
}
